package com.tarena.lbs.basic.dao.repository.impl;

import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tarena.lbs.basic.dao.mapper.TagMapper;
import com.tarena.lbs.basic.dao.mapper.TagTypeMapper;
import com.tarena.lbs.basic.dao.repository.TagRepository;
import com.tarena.lbs.basic.pojo.po.TagLibraryPO;
import com.tarena.lbs.basic.pojo.po.TagLibraryPO1;
import com.tarena.lbs.basic.pojo.po.TagTypePO;
import com.tarena.lbs.basic.pojo.query.TagQuery;
import com.tarena.lbs.basic.pojo.query.TagTypeQuery;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@Slf4j
public class TagRepositoryImpl implements TagRepository {
    @Autowired
    private TagMapper tagMapper;
   @Autowired
   private TagTypeMapper tagTypeMapper;
    @Override
    public List<TagLibraryPO> getTagsBytType(Integer tagType) {
        //select * from lbs_tag_library where tag_type=#{}
        QueryWrapper<TagLibraryPO> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("tag_type",tagType);
        return tagMapper.selectList(queryWrapper);
    }

    @Override
    public void addTag(TagLibraryPO po) {
        log.debug("开始新增标签,新增标签po:{}",po);
        // 如果 tagType 为空，则设置默认值
        if (po.getTagType() == null) {
            po.setTagType(0); // 或其他合适的默认值
        }
        tagMapper.insert(po);
    }

    @Override
    public PageInfo<TagLibraryPO1> list(TagQuery query) {
        // 设置分页参数
        PageHelper.startPage(query.getPageNo(), query.getPageSize());

        // 构建查询条件 - 应该使用 query 参数
        QueryWrapper<TagLibraryPO> wrapper = assmbleTagQuery(query);

        // 添加 status != 2 的条件
        wrapper.ne("status", 2);

        // 执行查询
        List<TagLibraryPO1> list = tagMapper.selectList1(query);

        // 返回分页结果
        return new PageInfo<>(list);
    }

    //查询标签分类
    @Override
    public List<TagTypePO> tagTypeList(TagTypeQuery query) {
        QueryWrapper<TagTypePO> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("parent_id",query.getParentId());
        queryWrapper.or().eq("type_name", query.getTypeName());
        return tagTypeMapper.selectList(queryWrapper);

    }

    @Override
    public TagLibraryPO getTagInfoById(Integer id) {
        log.debug("repository层：根据标签id查询标签信息");
        TagLibraryPO po = tagMapper.selectById(id);
        return po;

    }

    @Override
    public void editTag(TagLibraryPO po) {
        tagMapper.updateById(po);
    }

    @Override
    public PageInfo<TagLibraryPO> pageList(TagQuery query) {
        QueryWrapper<TagLibraryPO> queryWrapper = assmbleTagQuery(query);
        // 使用PageHelper进行分页
        PageHelper.startPage(query.getPageNo(), query.getPageSize());
        //状态为2即为删除
        queryWrapper.ne("status",2);
        List<TagLibraryPO> tagList =  tagMapper.selectList(queryWrapper);
        return new PageInfo<>(tagList);
    }

    @Override
    public TagLibraryPO getTagInfoByName(String tagName) {
        log.debug("开始根据标签名称查询标签信息");
        return tagMapper.getTagInfoByName(tagName);

    }

    private QueryWrapper<TagLibraryPO> assmbleTagQuery(TagQuery query){
        QueryWrapper<TagLibraryPO> queryWrapper = new QueryWrapper<>();

        //标签名称
        if(StringUtils.isNotBlank(query.getTagName())){
            //模糊查询
            queryWrapper.like("tag_name",query.getTagName());
        }
        //标签分组
        if(StringUtils.isNotBlank(query.getTagType())){
            queryWrapper.like("tag_type",query.getTagType());
        }
        //启用状态
        if(query.getStatus()!=null){
            queryWrapper.like("status",query.getStatus());
        }

        if(query.getEndTime()!=null){
            queryWrapper.ge("create_at",query.getStartingTime())
                    .le("create_at",query.getEndTime());
        }
        queryWrapper.orderByDesc("id");

        return  queryWrapper;
    }


}
